<?php


namespace app\back\controller;


use app\back\model\OrderModel;
use app\middleware\BackAuth;
use think\facade\Validate;
use app\Request;
use think\response\Json;
use think\validate\ValidateRule;

class Order
{
    protected $middleware = [BackAuth::class];

    /**公司获取划账列表
     * @param Request $request
     * @return Json
     */
    public function getCompanyDrawList(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['start'] = $request->post('start');
        $input['end'] = $request->post('end');
        $input['name'] = $request->post('name');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'start' => function ($value) {
                return checkDatetime($value, true) ? true : '不合法参数';
            },
            'end' => function ($value) {
                return checkDatetime($value, true) ? true : '不合法参数2';
            },
            'name' => function ($value) {
                return $value === null ? '缺少参数' : true;
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::getCompanyDrawList($input,$request->info);
    }

    /**代理商获取划账列表
     * @param Request $request
     * @return Json
     */
    public function getAgentDrawList(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['start'] = $request->post('start');
        $input['end'] = $request->post('end');
        $input['name'] = $request->post('name');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'start' => function ($value) {
                return checkDatetime($value, true) ? true : '不合法参数';
            },
            'end' => function ($value) {
                return checkDatetime($value, true) ? true : '不合法参数2';
            },
            'name' => function ($value) {
                return $value === null ? '缺少参数' : true;
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::getAgentDrawList($input,$request->info);
    }

    /**获取列表
     * @param Request $request
     * @return Json
     */
    public function list(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['start'] = $request->post('start');
        $input['end'] = $request->post('end');
        $input['is_believe'] = $request->post('is_believe');
        $input['draw_status'] = $request->post('draw_status');
        $input['status'] = $request->post('status');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'is_believe' => function($value) {
                return in_array($value, ['', '1', '0'], true) ? true : '不合法参数' ;
            },
            'draw_status' => function($value) {
                return in_array($value, ['', '1', '0'], true) ? true : '不合法参数' ;
            },
            'status' => function($value) {
                return in_array($value, ['', '-5','-4','-3','-2','-1','0','1','2','3','4','5','6'], true) ? true : '不合法参数' ;
            },
            'start' => function ($value) {
                return checkDatetime($value) ? true : '不合法参数';
            },
            'end' => function ($value) {
                return checkDatetime($value) ? true : '不合法参数';
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::list($input,$request->info);
    }

    /**获取主订单列表
     * @param Request $request
     * @return Json
     */
    public function getMasterList(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['start'] = $request->post('start');
        $input['end'] = $request->post('end');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'start' => function ($value) {
                return checkDatetime($value) ? true : '不合法参数';
            },
            'end' => function ($value) {
                return checkDatetime($value) ? true : '不合法参数';
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::getMasterList($input,$request->info);
    }

    /**下载主订单出库excel表
     * @param Request $request
     * @return Json
     */
    public function outExcel(Request $request)
    {
        // 获取参数
        $input['mastr_order_no'] = $request->post('mastr_order_no');
        // 参数校验
        $validate = Validate::rule([
            'mastr_order_no' => ValidateRule::isRequire(null, '缺少参数')
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::outExcel($input,$request->info);
    }
    /**获取订单日志
     * @param Request $request
     * @return Json
     */
    public function getOrderLogList(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null,'缺少参数')->regex('/^[1-9][0-9]*$/', '不合法数据'),
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::getOrderLogList($input);
    }

    /**受理退款
     * @param Request $request
     * @return Json
     */
    public function backMoney(Request $request)
    {
        // 获取参数
        $input['back_money'] = $request->post('back_money');
        $input['id'] = $request->post('id');
        $input['status'] = $request->post('status');
        $input['unback_reason'] = $request->post('unback_reason');
        $input['total_price'] = $request->post('total_price');
        // 参数校验
        $validate = Validate::rule([
            'id' => ValidateRule::isRequire(null,'缺少参数')->regex('/^[1-9][0-9]*$/', '不合法数据'),
            'status' => function ($value) {
                return in_array($value, ['0', '1'], true) ? true : '不合法参数';
            },
            'unback_reason' => function ($value) {
                return $value === null ? '缺少参数' : true;
            },
            'total_price' => function ($value) {
                return $value === null ? '缺少参数' : true;
            },
            'back_money' => function ($value, $all) {
                return $value <= $all['total_price'] ? true : '不合法参数';
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::backMoney($input,$request->info);
    }

    /**运营商获取划账|结算列表
     * @param Request $request
     * @return Json
     */
    public function getDrawList(Request $request)
    {
        // 获取参数
        $input['draw_name'] = $request->post('draw_name');
        $input['end'] = $request->post('end');
        $input['start'] = $request->post('start');
        $input['type'] = $request->post('type');
        // 参数校验
        $validate = Validate::rule([
            'end' => function ($value) {
                return checkDatetime($value,true) ? true : '不合法参数';
            },
            'start' => function ($value) {
                return checkDatetime($value,true) ? true : '不合法参数';
            },
            'draw_name' => function ($value) {
                return $value === null ? '缺少参数' : true;
            },
            'type' => function ($value) {
                return in_array($value, ['drawCompanyVisible','drawAgentVisible','drawDriverVisible','settlementVisible'], true) ? true : '不合法参数';
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::getDrawList($input,$request->info);
    }

    /**运营商划账|结算订单
     * @param Request $request
     * @return Json
     */
    public function drawOrder(Request $request)
    {
        // 获取参数
        $input['id'] = $request->post('id');
        $input['type'] = $request->post('type');
        $input['end'] = $request->post('end');
        $input['start'] = $request->post('start');
        // 参数校验
        $validate = Validate::rule([
            'id' => function ($value) {
                return $value === null ? '缺少参数' : true;
            },
            'type' => function ($value) {
                return in_array($value, ['drawCompanyVisible','drawAgentVisible','drawDriverVisible','settlementVisible'], true) ? true : '不合法参数';
            },
            'end' => function ($value) {
                return checkDatetime($value,true) ? true : '不合法参数';
            },
            'start' => function ($value) {
                return checkDatetime($value,true) ? true : '不合法参数';
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::drawOrder($input,$request->info);
    }

    /**获取划账|结算记录
     * @param Request $request
     * @return Json
     */
    public function getDrawLogList(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['type'] = $request->post('type');
        $input['name'] = $request->post('name');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'type' => function ($value) {
                return in_array($value, ['1','2','3','4'], true) ? true : '不合法参数';
            },
            'name' => function ($value) {
                return $value === null ? '缺少参数' : true;
            },
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::getDrawLogList($input,$request->info);
    }

    /**获取下单统计列表
     * @param Request $request
     * @return Json
     */
    public function getStatisticsList(Request $request)
    {
        // 获取参数
        $input['limit'] = $request->post('limit');
        $input['page'] = $request->post('page');
        $input['start'] = $request->post('start');
        $input['end'] = $request->post('end');
        // 参数校验
        $validate = Validate::rule([
            'limit' => ValidateRule::isRequire(null, '缺少参数'),
            'page' => ValidateRule::isRequire(null, '缺少参数'),
            'start' => function ($value) {
                return checkDatetime($value,true) ? true : '不合法参数';
            },
            'end' => function ($value) {
                return checkDatetime($value,true) ? true : '不合法参数';
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::getStatisticsList($input,$request->info);
    }

    /**下载下单统计列表
     * @param Request $request
     * @return Json
     */
    public function statisticsExcel(Request $request)
    {
        // 获取参数
        $input['start'] = $request->post('start');
        $input['end'] = $request->post('end');
        // 参数校验
        $validate = Validate::rule([
            'start' => function ($value) {
                return checkDatetime($value,true) ? true : '不合法参数';
            },
            'end' => function ($value) {
                return checkDatetime($value,true) ? true : '不合法参数';
            }
        ]);

        if (!$validate->check($input)) {
            return jsonFail($validate->getError());
        }
        // 逻辑处理
        return OrderModel::statisticsExcel($input,$request->info);
    }
}